#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "zipcompress.h"
#include "QThread"

class WorkerThread;

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


private Q_SLOTS:
    void on_pushButton_c_clicked();
    void on_pushButton_e_clicked();
    void on_pushButton_c_2_clicked();

    void slotsDirinish(QString operateType, bool status);
    void slotsCompressionProgress(qreal progress, QString operateType, QString filePath);
    void slotsFileProgress(qreal progress, QString filePath);

private:
    /// 获得文件最后一级目录
    QString extractLastDirName(const QString &filePath);

private:
    Ui::Widget *ui;
    compressionTool::zipCompress m_zipCompress;
    WorkerThread *mWorkerThread;

    const QString password = "abc@123";
};


class WorkerThread : public QThread {
    Q_OBJECT

public:
    WorkerThread(QObject *parent = nullptr);
    ~WorkerThread() override;

    void setOperatorPath(const QString &mPoerator, const QString &zipPath, const QString &path,
                         const QString &password, const QStringList &files = QStringList());

protected:
    void run() override;

Q_SIGNALS:
    /**
     * @brief (加密)解压缩进度通知信号
     * @param progress 进度值，范围为 0 到 100
     * @param operateType 操作类型（1压缩或2解压）
     */
    void signalCompressionProgress(qreal progress, QString operateType, QString filePath);

    /**
     * @brief 解压缩处理的当前文件进度通知信号
     * @param progress  进度值，范围为 0 到 100
     * @param filePath  当前正操作的文件
     */
    void signalFileProgress(qreal progress, QString filePath);

    /**
     * @brief (加密)压缩文件目录结束信号
     * @param status 压缩操作是否成功
     */
    //void signalCompressDirinish(bool status);

    /**
     * @brief (解密)解压文件目录结束信号
     * @param status 解压操作是否成功
     */
    //void signalExtractDirFinish(bool status);


    /**
     * @brief 告诉主线程线程执行完毕
     * @param operateType   1压缩或2解压
     * @param status        true成功，false失败
     */
    void signalThreadFinished(QString operateType, bool status);

private:


private:
    compressionTool::zipCompress m_zipCompress;
    QString mOperator;      // 1压缩文件夹，2解压缩，3压缩文件    --> 这里使用 枚举 更加好
    QString mZipPath;
    QString mPath;
    QString mPassword;
    QStringList mFiles;
};




#endif // WIDGET_H
